#ifndef _ARH_VRIJEME_H
#define _ARH_VRIJEME_H

#include "tipovi.h"

//vrijeme se izrazava u sekunde:nanosekunde
typedef struct _vrijeme_t_ {
	int32 sekunde;
	int32 nsekunde;
} vrijeme_t;

#define	SAT_FREKVENCIJA	1193180	// Frekvencija brojila u PIT-u (I8253 sklopu)

#define ARH_SAT_NAJVECI_BROJ 0xffff //mogao bi i jedan vise, ali tada ...
#define ARH_SAT_PRAG (0xffff/100) //ako u brojilu ima manje reloadam ga ...

typedef int arh_vrijeme_t;

#define arh_vrijeme_oduzmi(x, y) ((x) - (y))

//arh_vrijeme => j_vrijeme
static inline vrijeme_t arh_vrijeme_u_j_vrijeme (arh_vrijeme_t arh)
{
	vrijeme_t j;
	
	j.sekunde = arh / SAT_FREKVENCIJA;
	j.nsekunde = (int) ((arh % SAT_FREKVENCIJA) * 1.E9 / SAT_FREKVENCIJA);
	
	return j;
}

//j_vrijeme => arh_vrijeme
static inline arh_vrijeme_t arh_j_vrijeme_u_arh_vrijeme (vrijeme_t j)
{
	arh_vrijeme_t arh;
	
	arh = (int) (j.sekunde + j.nsekunde / 1.E9) * SAT_FREKVENCIJA;
	
	return arh;
}

void arh_dozvoli_prekid_sata ();
void arh_zabrani_prekid_sata ();

void arh_sat_ucitaj_brojilo (arh_vrijeme_t broj);
arh_vrijeme_t arh_sat_procitaj_brojilo ();


#ifdef _ARH_VRIJEME_C_

#define	I8253_CH0	0x40
#define	I8253_CH1	0x41	//ne koristi se
#define	I8253_CH2	0x42	//ne koristi se
#define	I8253_CMD	0x43
#define	I8253_FREQ	1193180
#define	I8253_CMD_LOAD	0x34

// pisanje/citanje PIT-a
static	int arh_i8253_posalji (arh_vrijeme_t brojilo);
static	arh_vrijeme_t arh_i8253_procitaj ();

#endif //_ARH_VRIJEME_C_
#endif	/* _ARH_VRIJEME_H */